﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace SanguoSharp
{

    public interface IGame
    {
        /// <summary>
        /// Gets the collection of the players in the game.
        /// </summary>
        ReadOnlyCollection<IPublicPlayerView> Players { get; }

        /// <summary>
        /// Gets the card that is on the top of the graveyard.
        /// </summary>
        ICard GraveyardTop { get; }

        /// <summary>
        /// Gets the public view of the temporary card selection.
        /// </summary>
        ReadOnlyCollection<ICard> Selection { get; }

        /// <summary>
        /// Gets the <see cref="IPublicPlayerView"/> of the player currently on turn.
        /// </summary>
        IPublicPlayerView CurrentPlayer { get; }
        /// <summary>
        /// Gets the <see cref="IPublicPlayerView"/> of the player currently requested for a response.
        /// </summary>
        IPublicPlayerView RequestedPlayer { get; }
        /// <summary>
        /// Gets the <see cref="IPublicPlayerView"/> of the player that caused the current request, or null if no player caused it.
        /// </summary>
        IPublicPlayerView CausedBy { get; }

        /// <summary>
        /// Gets the <see cref="IPublicPlayerView"/> of the player with the specified ID.
        /// </summary>
        /// <param name="id">
        /// The ID of the player.
        /// </param>
        /// <returns>
        /// The <see cref="IPublicPlayerView"/> of the player.
        /// </returns>
        IPublicPlayerView GetPublicPlayerView(int id);
    }
}
